package com.liuzu.esys.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liuzu.esys.bo.IntoStorageBo;
import com.liuzu.esys.bo.StorageBo;
import com.liuzu.esys.common.LayuiPageVo;
import com.liuzu.esys.mapper.StorageMapper;
import com.liuzu.esys.pojo.IntoStorage;
import com.liuzu.esys.pojo.Storage;
import com.liuzu.esys.service.StorageService;
import com.liuzu.esys.vo.StorageBarVo;
import com.liuzu.esys.vo.StorageNumberVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.DuplicateFormatFlagsException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 太上老君保佑：代码，绿绿绿绿绿！！！！！
 *
 * @Description :
 * @Author : 冯小冯
 * @Date : 2022-07-25 15:21
 */
@Service("/storageService")
public class StorageServiceImpl implements StorageService {
    @Autowired
    private StorageMapper storageMapper;
    //分页展示数据和模糊查询的接口
    @Override
    public LayuiPageVo<Storage> storagePageData(Map<String, Object> params) {

        // mybatis 的 分页插件
        Integer page = Integer.parseInt(params.get("page")+"");
        Integer limit = Integer.parseInt(params.get("limit")+"");
        PageHelper.startPage(page,limit);

        List<Storage> storages = storageMapper.selectByParams(params);
        // mybatis 的 分页数据结构
        PageInfo<Storage> studentPageInfo = new PageInfo<>(storages);
        //把mybatis 的 分页数据 封装到  layui 的分页数据结构中

        LayuiPageVo<Storage> studentLayuiPageVo = new LayuiPageVo<>();
        studentLayuiPageVo.setCode(0);  // layui 默认 0 是正确的状态码
        studentLayuiPageVo.setMsg("分页列表数据"); // 提示信息
        studentLayuiPageVo.setCount(studentPageInfo.getTotal()); // 总记录数
        studentLayuiPageVo.setData(studentPageInfo.getList());  // 分页的列表数据
        return studentLayuiPageVo;
    }

    @Override
    public int storageAdd(Storage storage) {
        return storageMapper.storageAdd(storage);
    }

    @Override
    public int storageUpdate(Storage storage) {
        return storageMapper.storageUpdate(storage);
    }

    @Override
    public int storageDelete(int id) {
        return storageMapper.storageDelete(id);
    }


    //跟随入库信息向仓库中进行添加数据或者修改数据
    @Override
    public int storageaddByInto(IntoStorage intoStorage,Storage storage) {
        //把在入库表中添加的数据设置到需要添加到仓库的信息
        storage.setName(intoStorage.getName());
        storage.setType(intoStorage.getType());
        storage.setStock(String.valueOf(intoStorage.getNumber()));

        //查询当前仓库中所有的数据
        List<Storage> storages = storageMapper.selectToStock();
        //设置一个flage稍后进行判断
        Boolean flage = false;



        //增强for循环对接收到的所有数据进行遍历 找到所有的name
        for(Storage i : storages){
           //storagess.add(i.getName());
            System.out.println(i.getName());
            //用需要添加到仓库的数据中的name和仓库中现有的name进行对比 如果仓库中已经有了给一个true
            //如果仓库中没有 给一个false
            flage = storage.getName().equals(i.getName());
            System.out.println(flage);
            //进行判断 如果flage为true 就是仓库中现在已经有了这个商品进行修改库存
            if (flage==true){
                //查询这个商品在仓库中的所有库存
                Integer stock1 = storageMapper.selectBoStock(storage.getName());
                System.out.println(stock1);
                //将仓库中的所有库存和入库的数量进行相加
                Integer stock = Integer.valueOf(stock1);  //我在建表的时候弄成了string就转换一下int
                Integer number = intoStorage.getNumber();
                storage.setStock(String.valueOf(stock+number));
                //进行更新数据
                return storageMapper.updateToStock(storage);
            }
           }
        //如果flage为false就进行添加数据到仓库中
        if (flage==false){
            return storageMapper.storageaddByInto(storage);
        }
        return 0;
    }




    @Override
    public List<StorageBarVo> nameBarData() {
        return storageMapper.nameBarData();
    }


    @Override
    public List<StorageBo> StorageExcelData(Storage storage) {
        List<Storage> storages = storageMapper.selectByKey(storage);
        List<StorageBo> collect = storages.stream().map((o) -> {
            StorageBo storageBo = new StorageBo();
            storageBo.setId(o.getId());
            storageBo.setName(o.getName());
            storageBo.setType(o.getType());
            storageBo.setStock(o.getStock());
            return storageBo;
        }).collect(Collectors.toList());

        return collect;
    }

    @Override
    public int deleteStoragesByIds(String ids) {
        String[] arrId = ids.split(",");
        return storageMapper.deleteMessageByIds(arrId);

    }

    @Override
    public List<StorageNumberVo> nameNumberBarData() {
        return storageMapper.nameNumerBarData();
    }

}
